namespace Viyi.Util
{
    partial class StringUtil
    {
        /// <summary>
        /// 将字符串转换为<c>bool</c>类型。
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <param name="defaultValue">转换失败时返回的默认值</param>
        /// <returns>转换得来的<c>bool</c>值。若转换失败返回<c>defaultValue</c>。</returns>
        /// <remark>如果输入的字符串是<c>"true"</c>或<c>"false"</c>
        /// （不区分大小写，可以在前端或后端包含空白字符），
        /// 则分别得到<c>true</c>或<c>false</c>。其它情况均会造成转换失败。</remark>
        public static bool ToBoolean(this string s, bool defaultValue)
        {
            bool value;
            return bool.TryParse(s, out value) ? value : defaultValue;
        }

        /// <summary>
        /// 将字符串转换为<c>bool</c>类型。
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <returns>转换得来的<c>bool</c>值。若转换失败返回<c>false</c>。</returns>
        /// <remark>如果输入的字符串是<c>"true"</c>或<c>"false"</c>
        /// （不区分大小写，可以在前端或后端包含空白字符），
        /// 则分别得到<c>true</c>或<c>false</c>。其它情况均会造成转换失败。</remark>
        public static bool ToBoolean(this string s)
        {
            bool value;
            return bool.TryParse(s, out value) && value;
        }

        /// <summary>
        /// 将字符串转换为<c>Nullable&lt;bool&gt;</c>类型。
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <returns>转换得来的<c>bool?</c>值。若转换失败返回<c>null</c>。</returns>
        /// <remark>如果输入的字符串是<c>"true"</c>或<c>"false"</c>
        /// （不区分大小写，可以在前端或后端包含空白字符），
        /// 则分别得到<c>true</c>或<c>false</c>。其它情况均会造成转换失败。</remark>
        public static bool? ToNullableBoolean(this string s)
        {
            bool value;
            return bool.TryParse(s, out value) ? (bool?) value : null;
        }
    }
}
